from django.http import HttpResponseRedirect
from django.http import HttpResponse
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.contrib.auth.decorators import login_required
from django.core.urlresolvers import reverse
from apps.amway.forms.clientes import AddClienteForm, EditClienteForm, AddProductoClienteForm, AddPagoClienteForm, AddNotaClienteForm
from apps.amway.models import Cliente, ProductosCliente, Producto, Inventario, HistorialInventario, VentaCliente, Nota, PagosCliente, PreciosProducto, TipoTransaccion #, Pedido
################################################################################
################################################################################
################################################################################
#### Modulo de vistas para el manejo de clientes
################################################################################
@login_required
def agregar_clientes(request, form_class=AddClienteForm):
    usuario = request.user    
    if request.method == 'POST':
        form = form_class(request.POST)        
        if form.is_valid():            
            form.save(usuario)           
            return HttpResponseRedirect(reverse('clientes'))
    else:
        form = form_class()
    return render_to_response("amway/clientes/agregar_clientes.html",
                              { 'form' : form },
                                context_instance=RequestContext(request))
################################################################################
@login_required
def listar_clientes(request):
    usuario = request.user
    clientes = Cliente.objects.filter(usuario=usuario, activo=1).order_by('codigo')
    return render_to_response("amway/clientes/listar_clientes.html",
                              { 'clientes' : clientes, 'usuario' : usuario },
                                context_instance=RequestContext(request))
#################################################################################
@login_required
def ver_cliente(request, cliente_id):
    cliente = Cliente.objects.get(pk=cliente_id)
    return render_to_response("amway/clientes/ver_cliente.html",
                              { 'cliente' : cliente },
                                context_instance=RequestContext(request))    
################################################################################
@login_required
def editar_cliente(request, cliente_id, form_class=EditClienteForm):
    cliente = Cliente.objects.get(pk=cliente_id)
    depto = cliente.departamento.codigo
    ciudad = cliente.ciudad.codigo
    if request.method == 'POST':
        form = form_class(request.POST)
        if form.is_valid():
            form.save(cliente_id, request.user)            
            return HttpResponseRedirect(reverse('clientes'))
    else:
        form = form_class()
        form.datos_cliente(cliente_id)
    return render_to_response("amway/clientes/editar_cliente.html",
                              { 'form' : form , 'depto' : depto, 'ciudad' : ciudad},
                                context_instance=RequestContext(request))
################################################################################
@login_required
def ver_ventas_cliente(request, cliente_id):
    cliente = Cliente.objects.get(pk=cliente_id)
    productos_cliente = ProductosCliente.objects.filter(cliente__codigo=cliente_id)
    return render_to_response("amway/clientes/ver_ventas_cliente.html",
                              { 'cliente': cliente, 'productos_cliente' : productos_cliente },
                                context_instance=RequestContext(request))
################################################################################
@login_required
def agregar_productos_cliente(request, cliente_id, form_class=AddProductoClienteForm):
    if request.method == 'POST':
        form = form_class(request.POST)
        print form.is_valid()
        if form.is_valid():
            #form.save(cliente_id)
            #print request
            return HttpResponseRedirect(reverse('agregar_productos_cliente', kwargs={ 'cliente_id': cliente_id } ))          
    else:
        form = form_class()
        form.cliente_init_val(cliente_id)
    return render_to_response("amway/clientes/agregar_productos_cliente.html",
                              { 'form' : form, 'cliente': cliente_id },
                              context_instance=RequestContext(request))
################################################################################
@login_required
def agregar_nota_cliente(request, cliente_id, form_class=AddNotaClienteForm):
    if request.method == 'POST':
        form = form_class(request.POST)
        if form.is_valid():
            form.save(cliente_id)
            return HttpResponseRedirect(reverse('ver_notas_cliente', kwargs={ 'cliente_id': cliente_id } ))    
    else:
        form = form_class()        
    return render_to_response("amway/clientes/agregar_nota_cliente.html",
                              { 'form' : form },
                              context_instance=RequestContext(request))
################################################################################
@login_required
def ver_notas_cliente(request, cliente_id):    
    if request.POST.getlist('elinar_nota'):
        eliminar_notas = request.POST.getlist('elinar_nota')        
        for nota in eliminar_notas:            
            n = Nota.objects.get(id=nota)
            n.delete()   
    cliente = Cliente.objects.get(pk=cliente_id)    
    notas = Nota.objects.filter(cliente__exact=cliente)
    return render_to_response("amway/clientes/ver_notas_cliente.html",
                              { 'notas' : notas, 'cliente' : cliente },
                              context_instance=RequestContext(request))    
################################################################################
@login_required
def pagos_clientes(request):
    ventas = VentaCliente.objects.filter(usuario=request.user)
    return render_to_response("amway/clientes/pagos_cliente.html",
                              { 'ventas' : ventas },
                                context_instance=RequestContext(request))
################################################################################
@login_required
def registrar_pago_cliente(request, cliente_id, form_class=AddPagoClienteForm):    
    venta = VentaCliente.objects.get(usuario=request.user, cliente__codigo=cliente_id)
    if request.method == 'POST':
        form = form_class(request.POST)
        if form.is_valid():
            form.save(cliente_id)
            return HttpResponseRedirect(reverse('pagos_clientes'))   
    
    else:
        form = form_class()
        form.cliente_init_val(cliente_id)
    return render_to_response("amway/clientes/registrar_pago_cliente.html",
                              { 'form' : form, 'saldo' : venta.saldo, 'cliente' : venta.cliente },
                              context_instance=RequestContext(request))
################################################################################
@login_required
def ver_pagos_clientes(request, cliente_id):
    cliente = Cliente.objects.get(pk=cliente_id)
    pagos = PagosCliente.objects.filter(cliente__codigo=cliente_id)
    return render_to_response("amway/clientes/ver_pagos_cliente.html",
                              { 'pagos' : pagos, 'cliente' : cliente },
                                context_instance=RequestContext(request))
################################################################################
@login_required
def eliminar_venta(request, producto_id):
    
    producto = ProductosCliente.objects.select_related().get(pk=producto_id)
    inventario = Inventario.objects.get(producto=producto.producto, usuario=producto.cliente.usuario)
    precio = PreciosProducto.objects.get_precio_x_fecha(producto.producto.descripcion, producto.fecha_entrega)
    tipo_transaccion = TipoTransaccion.objects.get(pk=10)
    
    valor = producto.cantidad * int(precio)
    venta = VentaCliente.objects.set_valor_saldo_delete_venta(producto.cliente, valor)
    cliente_id = producto.cliente.codigo
    nuevo_valor = int(inventario.valor) + valor
    inventario.existencias += producto.cantidad
    inventario.valor = nuevo_valor
    
    historial_inventario = HistorialInventario.objects.create(fecha=producto.fecha_entrega, inventario=inventario, transaccion=tipo_transaccion, cantidad=producto.cantidad, usuario=producto.cliente.usuario)
    inventario.save()
    producto.delete()
    return HttpResponseRedirect(reverse('ver_ventas_cliente', kwargs={ 'cliente_id': cliente_id } ))
################################################################################